import javax.swing.JOptionPane;

import Events.*;
import Events.Defaults.*;

//test de un objeto que soporta eventos
class TestObject extends Events.ListeningObject 
{
	private int x;
	private int y;
	
	public TestObject()
	{
		super();
		
		x = 0;
		y = 0;
	}
	
	public int getLocalX()
	{
		return x;
	}
	
	public int getLocalY()
	{
		return y;
	}
	
	public void changeXY(int xx, int yy)
	{
		x = xx;
		y = yy;
		
		PairEvent ev = new PairEvent(Initialize.CoordinationMiddleware.EventHandler.getCommunicator());
		ev.setX(x);
		ev.setY(y);
		
		Initialize.CoordinationMiddleware.EventHandler.push(ev);
	}
}

//test de una clase listener
class TestListener implements EventListener 
{
	public boolean checkEvent(Event evt)
	{
		if (evt.getType() == PairEvent.PAIR_EVENT_TYPE)
		{
			return true;
		}
		else return false;
	}
	
	public void action(Object receiver, Event data)
	{
		PairEvent evt = new PairEvent(data);
		System.out.println("recibido: "+evt.getX()+ ", "+evt.getY());
	}
	
	public String name()
	{
		return "test_listener";
	}
}

public class TestClient 
{
	public static void main(String[] args)
	{
		if (!Initialize.CoordinationMiddleware.initCoordinationMiddleware())
		{
			System.out.println( "error al inicializar el middleware de coordinacion" );
			System.exit(1);
		}

		//////////  TEST DE OBJETO EMISOR/RECEPTOR DE EVENTOS //////////
		TestObject dobj = new TestObject();
		TestListener listener = new TestListener();
		dobj.addEventListener(listener);
		
		Initialize.CoordinationMiddleware.EventHandler.registerObject(dobj);
		
		System.out.println( "\n\nPrueba de componente distribuido: ");
		int x = 0;
		int y = 0;
		
		while(true)
		{
			String aux = JOptionPane.showInputDialog("Introduzca numeros para enviar (pareja separada por espacios)");
			
			try{
				String[] aux_v = aux.split(" ");
				x = Integer.parseInt(aux_v[0]);
				y = Integer.parseInt(aux_v[1]);
				
				dobj.changeXY(x, y);
			}
			catch(Exception ex)
			{
				Initialize.CoordinationMiddleware.shutdownCoordinationMiddleware();
				System.exit(1);
			}
		} //bucle infinito para evitar el fin del cliente
	}
}
